// 小和问题
// 测试链接 : https://www.nowcoder.com/practice/edfe05a1d45c4ea89101d936cac32469
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 10;
int arr[MAXN];
int help[MAXN];
int n;

// 返回跨左右产生的小和累加和，左侧有序、右侧有序，让左右两侧整体有序
// arr[l...m] arr[m+1...r]
long long merge(int l, int m, int r)
{
    // 统计部分
    long long ans = 0;
    for(int i = l, j = m + 1, sum = 0; j <= r; ++j)
    {
        while(i <= m && arr[i] <= arr[j]) sum += arr[i++];
        ans += sum;
    }

    // 正常的 merge 过程
    int i = l, a = l, b = m + 1;
    while(a <= m && b <= r)
    {
        help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];
    }
    while(a <= m) help[i++] = arr[a++];
    while(b <= r) help[i++] = arr[b++];
    for(i = l; i <= r; ++i) arr[i] = help[i];

    return ans;
}

// 结果比较大，用int会溢出的，所以返回long类型
// 特别注意溢出这个点，笔试常见坑
// 返回arr[l...r]范围上，小和的累加和，同时请把arr[l..r]变有序
// 时间复杂度O(n * logn)
long long smallSum(int l, int r)
{
    if(l >= r) return 0;
    int m = l + ((r - l) >> 1);
    return smallSum(l, m) + smallSum(m + 1, r) + merge(l, m, r);
}

int main()
{
    scanf("%d", &n);
    for(int i = 0; i < n; ++i) scanf("%d", &arr[i]);
    printf("%lld\n", smallSum(0, n - 1));

    return 0;
}